<?php
/**
 * Controller_Ajax_Contract
 *
 * Класс Controller_Ajax_Contract отвечает за обработку запросов связанных с договорами
 */
class Controller_Ajax_Contract extends Controller_Ajax {

	/**
	 * (non-PHPdoc)
	 *
	 */
	public function actionSwitch() {
	  Service_Debug::setDebug();
		switch ($this->arrRequest[2]) {
			case 'add':
				$this->actionAdd();
				break;
			case 'accept_contract':
				$this->actionAccept();
				break;
			case 'not_accept_contract':
				$this->actionNotAccept();
				break;
			case 'response':
				$this->actionAddResponse();
				break;
			default: $this->setError(404);
 		}
	}

	
	/**
	 * Добавление договора
	 *
	 */
	public function actionAdd () {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
		
		$ID_master = isset($_POST['ID_master']) ? Service_Escape::absolutelyEscapeString($_POST['ID_master']) : '';
		$contract_name = isset($_POST['contract_name']) ? Service_Escape::absolutelyEscapeString($_POST['contract_name']) : '';
		$contract_description = isset($_POST['contract_description']) ? Service_Escape::absolutelyEscapeString($_POST['contract_description']) : '';
		$first_name = isset($_POST['first_name']) ? Service_Escape::absolutelyEscapeString($_POST['first_name']) : '';
		$last_name = isset($_POST['last_name']) ? Service_Escape::absolutelyEscapeString($_POST['last_name']) : '';
		$middle_name = isset($_POST['middle_name']) ? Service_Escape::absolutelyEscapeString($_POST['middle_name']) : '';
		$deadline = isset($_POST['deadline']) ? Service_Escape::absolutelyEscapeString($_POST['deadline']) : '';
		$city = isset($_POST['city']) ? Service_Escape::absolutelyEscapeString($_POST['city']) : '';
		$objUser = $objSession->getUser();
		
		// Если пришли все данные и пользователь создающий договор - не мастер, сохраняем договор
		if (empty($ID_master) || empty($contract_name) || empty ($contract_description) || empty ($first_name) || empty ($last_name) 
			|| empty ($middle_name) || empty ($deadline) || empty ($city) || !$objUser->id || $objUser->getField('user_type') == 'master') return $this->makeStandardError('Ошибка');
		
			$contractArray = array (
							'ID_master' => $ID_master,
							'ID_user' => $objUser->id,
							'contract_name' => $contract_name,
							'contract_description' => $contract_description,
							'first_name' => $first_name,
							'last_name' => $last_name,
							'middle_name' => $middle_name,
							'deadline' => $deadline,
							'city' => $city,
							'save' => 'Отправить'
							);
		
		$objContract = new Contract();
		$objContract->setFields($contractArray);
		
		if($objContract->save()) {
			$this->arrReturn = array('result' => 'OK','id' => $objContract->id);
		}
	}
	
	/**
	 * Добавление отзыва по договору
	 *
	 */
	public function actionAddREsponse () {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
		
		$ID_contract = isset($_POST['ID_contract']) ? Service_Escape::absolutelyEscapeString($_POST['ID_contract']) : '';
		$text = isset($_POST['text']) ? Service_Escape::absolutelyEscapeString($_POST['text']) : '';
		$objUser = $objSession->getUser();
		$objContract = new Contract($ID_contract);
		// Если пришли все данные и пользователь создающий договор - не мастер, сохраняем договор
		if (!$objContract->id || empty($text) || $objUser->getField('user_type') == 'master') return $this->makeStandardError('Ошибка');
	
		$contractResponseArray = array (
				'ID_contract' => $ID_contract,
				'text' => $text,
				'save' => 'Отправить'
		);
	
		$objContractResponse = new ContractResponse();
		$objContractResponse->setFields($contractResponseArray);
	
		if($objContractResponse->save()) {
			$this->arrReturn = array('result' => 'OK');
		}
	}
	
	/**
	 * Принятие (подписание) договора мастером
	 *
	 */
	public function actionAccept () {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
	
		$ID_contract = isset($_POST['ID_contract']) ? Service_Escape::absolutelyEscapeString($_POST['ID_contract']) : '';
		$objUser = $objSession->getUser();
		$objContract = new Contract($ID_contract);
	
		// Если пользователь не мастер или он не мастер текущего контракта или нет контракта с переданным id или статус контракта недопустимый
		if ($objUser->id != $objContract->getField('ID_master') || !$objUser->getField('user_type') == 'master' || !$objContract->id || ($objContract->id && $objContract->getField('status') !== null)) return $this->makeStandardError('Ошибка');
	
		$contractArray= array (
				'answer_date' => gmdate("Y-m-d H:i:s"),
				'status' => '1'
		);
	
		if($objContract->updateFields($contractArray)) {
			// Увеличиваем счётчик новых принятых договоров у заказчика
			User_User::changeNumber('+','contractEvents', $objContract->getField('ID_user'));
			// Уменьшаем счётчик договоров "в ожидании" у мастера
			User_User::changeNumber('-', 'contractEvents', $objContract->getField('ID_master'));
			$this->arrReturn = array('result' => 'OK', 'currentAllNewEventsCount' => $objUser->countNewEvents('all') - 1,'currentContractNewEventsCount' => ($objUser->countNewEvents('contracts') - 1));
		}
	}
	
	/**
	 * Отказ по договору
	 *
	 */
	public function actionNotAccept () {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
	
		$ID_contract = isset($_POST['ID_contract']) ? Service_Escape::absolutelyEscapeString($_POST['ID_contract']) : '';
		$objUser = $objSession->getUser();
		$objContract = new Contract($ID_contract);
	
		// Если пользователь не мастер или он не мастер текущего контракта или нет контракта с переданным id или статус контракта недопустимый
		if ($objUser->id != $objContract->getField('ID_master') || !$objUser->getField('user_type') == 'master' || !$objContract->id || ($objContract->id && $objContract->getField('status') !== null)) return $this->makeStandardError('Ошибка');
	
		$contractArray= array (
				'answer_date' => gmdate("Y-m-d H:i:s"),
				'status' => '0'
		);
	
		if($objContract->updateFields($contractArray)) {
			// Увеличиваем счётчик новых непринятых договоров у заказчика
			User_User::changeNumber('+','contractEvents', $objContract->getField('ID_user'));
			// Уменьшаем счётчик договоров "в ожидании" у мастера
			User_User::changeNumber('-', 'contractEvents', $objContract->getField('ID_master'));
			$this->arrReturn = array('result' => 'OK', 'currentAllNewEventsCount' => ($objUser->countNewEvents('all') - 1),'currentContractNewEventsCount' => ($objUser->countNewEvents('contracts') - 1));
		}
	}
}
?>